package com.spring.boot.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class MyDataUtil {

	/**
      * 指定日期加上天数后的日期
      * @param num 为增加的天数
      * @param newDate 创建时间
      * @param dateFormat yyyy-MM-dd HH:mm:ss
      * @return
      * @throws ParseException
      */
//     public static String plusDay(int num,String newDate, String dateFormat) throws ParseException{
//         SimpleDateFormat format = new SimpleDateFormat(dateFormat);
//         Date  currdate = format.parse(newDate);
//         System.out.println("现在的日期是：" + currdate);
//         Calendar ca = Calendar.getInstance();
//         ca.add(Calendar.DATE, num);// num为增加的天数，可以改变的
//         currdate = ca.getTime();
//         String enddate = format.format(currdate);
//         System.out.println("增加天数以后的日期：" + enddate);
//         return enddate;
//     }
	/**
     * 指定日期加上天数后的日期
     * @param day 为增加的天数
     * @param newDate 创建时间
     * @param dateFormat yyyy-MM-dd HH:mm:ss
     * @return
     * @throws ParseException
     */
     public static String plusDay(int day,String newDate, String dateFormat){
         SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
         String temp = "";
    	 try {
             Date date = sdf.parse(newDate);
             Calendar cl = Calendar.getInstance();
             cl.setTime(date);
             cl.add(Calendar.DATE, day);
             temp = sdf.format(cl.getTime());
         } catch (ParseException e) {
             e.printStackTrace();
         }
 		return temp;
     }

     public static void main(String[] args) throws ParseException {

		 System.out.println(timeDateToTian(new Date(),0));
//    	 getDate(0, dateFormat)
//		 System.out.println(timeDateToTian(new Date(),-1));
//    	 System.out.println(plusDay(1,"2019-03-14","yyyy-MM-dd"));
//    	 List<Date> list = getDatesBetweenTwoDate(string2Date("2019-03-14"), string2Date("2019-03-15"));
//    	 List<Date> list = getDatesBetweenTwoDate(StringToDate("2019-03-14"), StringToDate("2019-03-16"));
//    	 System.out.println("逾期时长:"+list.size());
//    	 for(int i=0; i<list.size(); i++){
//    		 System.out.println(list.get(i));
//    	 }
//    	 System.out.println("逾期时长："+getDatePoor(StringToDate("2019-03-14"), StringToDate("2019-03-15")));
//    	 if(0 >= 1 || (1 == 1 && 1 <= 2)){额

//				System.out.println("符合条件");
//		 }else{
//			 System.out.println("不服");
//		 }
	}


	/**
	 * 获取任意天
	 *
	 * @param day
	 *            第几天，例如0为今天，-1位昨天
	 * @param dateFormat
	 *            格式"yyyy-MM-dd"
	 * @return
	 */
	public static String getSureDate(int day, String dateFormat) {

		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DATE, day);
		Date time = cal.getTime();
		String resultDay = new SimpleDateFormat(dateFormat).format(time);

		return resultDay;
	}


	/**
	 *
	 * @param DATE1
	 * @param DATE2
	 * @param timeFormate 时间格式，例如 yyyy-MM
	 * @return 0时间相同，-1 DATE1 时间小于 DATE2，1则相反
	 */
	public static int compare_date(String DATE1, String DATE2, String timeFormate) {
        DateFormat df = new SimpleDateFormat(timeFormate);
        try {
            Date dt1 = df.parse(DATE1);
            Date dt2 = df.parse(DATE2);
            if (dt1.getTime() > dt2.getTime()) {
//                System.out.println("dt1 在dt2后");
                return 1;
            } else if (dt1.getTime() < dt2.getTime()) {
//                System.out.println("dt1在dt2前");
                return -1;
            } else {
                return 0;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return 0;
    }


	/**
	 * 根据开始时间和结束时间返回时间段内的时间集合
	 *
	 * @param beginDate
	 * @param endDate
	 * @return List
	 */
	public static List<Date> getDatesBetweenTwoDate(Date beginDate, Date endDate) {


		List<Date> lDate = new ArrayList<Date>();
		lDate.add(beginDate);// 把开始时间加入集合
		Calendar cal = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		cal.setTime(beginDate);
		boolean bContinue = true;
		while (bContinue) {
			// 根据日历的规则，为给定的日历字段添加或减去指定的时间量
			cal.add(Calendar.DAY_OF_MONTH, 1);
			// 测试此日期是否在指定日期之后
			if (endDate.after(cal.getTime())) {
				lDate.add(cal.getTime());
			} else {
				break;
			}
		}
		lDate.add(endDate);// 把结束时间加入集合
		return lDate;
	}

	public static Set<Date> getDatesBetweenTwoDateSet(Date beginDate, Date endDate) {
		Set<Date> lDate = new HashSet<Date>();
		lDate.add(beginDate);// 把开始时间加入集合
		Calendar cal = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		cal.setTime(beginDate);
		boolean bContinue = true;
		while (bContinue) {
			// 根据日历的规则，为给定的日历字段添加或减去指定的时间量
			cal.add(Calendar.DAY_OF_MONTH, 1);
			// 测试此日期是否在指定日期之后
			if (endDate.after(cal.getTime())) {
				lDate.add(cal.getTime());
			} else {
				break;
			}
		}
		lDate.add(endDate);// 把结束时间加入集合
		return lDate;
	}



//	/**
//	 * 字符串转日期
//	 * @param string
//	 * @return
//	 * @throws ParseException
//	 */
//	public static Date string2Date(String string) throws ParseException {
//        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
//        return sdf.parse(string);
//    }

	/**
	 * 时间差
	 * @param endDate
	 * @param nowDate
	 * @return
	 */
	public static String getDatePoor(Date endDate, Date nowDate) {
	    long nd = 1000 * 24 * 60 * 60;
	    long nh = 1000 * 60 * 60;
	    long nm = 1000 * 60;
	    long ns = 1000;
	    // 获得两个时间的毫秒时间差异
	    long diff = endDate.getTime() - nowDate.getTime();
	    // 计算差多少天
	    long day = diff / nd;
	    // 计算差多少小时
	    long hour = diff % nd / nh;
	    // 计算差多少分钟
	    long min = diff % nd % nh / nm;
	    // 计算差多少秒//输出结果
	     long sec = diff % nd % nh % nm / ns;

	    // day + "天" + hour + "小时" + min + "分钟";
//	    int rmin = (int)min;
//	    int rhour = (int)hour;
//	    double retime = (rmin/60.0)+rhour;
//	    retime = retime+hour;

	    if(hour == 0){
	    	return "-"+hour + "" + min +"";
//	    	return day + "天-" + hour + "小时" + min + "分钟"+ sec + "秒";
	    }else{
	    	return hour + "" + min +"";
//	    	return day + "天" + hour + "小时" + min + "分钟"+ sec + "秒";
	    }
//	    return hour + "" + min +"";
//	    return day + "天" + hour + "小时" + min + "分钟"+ sec + "秒";
	}

	/**
	 * 根据日期获得星期
	 *
	 * @param date
	 * @return
	 */
	public static String getWeekOfDate(Date date) {
		String[] weekDaysName = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
				"星期六" };
		String[] weekDaysCode = { "0", "1", "2", "3", "4", "5", "6" };
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		int intWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
		return weekDaysName[intWeek];
	}


	/**
	 * 时间戳转字符串
	 * HH:mm:ss
	 * @param date
	 * @return
	 */
	public static String getHMS(long timetemp) {
		Calendar calendar=Calendar.getInstance();
		calendar.setTimeInMillis(timetemp);
		SimpleDateFormat fmat=new SimpleDateFormat("HH:mm:ss");
		String time=fmat.format(calendar.getTime());
		return time;
	}

	/**
	 * 字符串转时间戳
	 * @param time
	 * @return
	 */
	public static int getTimestamp(String time){
		try {
			SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
			Date nowTimeDate = format.parse(time);
			return (int) (nowTimeDate.getTime());
		} catch (Exception e) {
			e.printStackTrace();
			return 0;
		}
	}


	/**
	 * 获取任意天
	 *
	 * @param day
	 *            第几天，例如0为今天，-1位昨天
	 * @param dateFormat
	 *            格式"yyyy-MM-dd"
	 * @return
	 */
	public static String getDate(int day, String dateFormat) {

		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DATE, day);
		Date time = cal.getTime();
		String resultDay = new SimpleDateFormat(dateFormat).format(time);

		return resultDay;
	}

	/**
	 * 获取任意月
	 *
	 * @param month
	 *            第几个月，例如0为本天，-1为上月
	 * @param dateFormat
	 *            格式"yyyy-MM"
	 * @return
	 */
	public static String getMonth(int month, String dateFormat) {
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.MONTH, month);
		Date time = cal.getTime();
		String resultDay = new SimpleDateFormat(dateFormat).format(time);

		return resultDay;
	}

	/**
	 * 时间转换成时间戳
	 *
	 * @param time
	 * @return
	 * @throws ParseException
	 */
	public static long dateToTimestamp(String time)
			throws ParseException {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
				"yyyy-MM-dd HH:mm:ss");
		Date date = simpleDateFormat.parse(time);
		long ts = date.getTime() / 1000;
		return ts;
	}

	/**
	 * 将时间转换为时间戳
	 *
	 * @param time
	 * @return
	 * @throws Exception
	 */
	public static Long dateToStamp(String time,String geShi) throws Exception {
		Long res;// 设置时间格式，将该时间格式的时间转换为时间戳
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(geShi);
		Date date = simpleDateFormat.parse(time);
		long t = date.getTime();
		res = Long.valueOf(t);
		return res;
	}

	/**
	 * 将时间戳转换为时间
	 *
	 * @param time
	 * @return
	 * @throws Exception
	 */
	public static String stampToTime(Long time) throws Exception {
		String res;
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
				"yyyy-MM-dd HH:mm:ss");
		long lt = new Long(time);// 将时间戳转换为时间
		Date date = new Date(lt);// 将时间调整为yyyy-MM-dd HH:mm:ss时间样式
		res = simpleDateFormat.format(date);
		return res;
	}

	/**
	 * 获取前24小时间注:(想取前2小时 Date Time24 = new Date(date.getTime() - 1000 * 60 * 60
	 * * 25);)
	 *
	 * @param time
	 * @return
	 * @throws ParseException
	 */
	public static String TuningTime24(String time) throws ParseException {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 定义时间格式
		Date date = new Date();
		date = format.parse(time);
		// Date Time24 = new Date(date.getTime() - 1000 * 60 * 60 * 24); //
		// 根据传过来的时间计算出它的前24小时的时间
		Date Time25 = new Date(date.getTime() - 1000 * 60 * 60 * 25); // 根据传过来的时间计算出它的前25小时的时间
		String yesterdayTime = format.format(Time25);// 将时间调整为yyyy-MM-dd //
														// HH:mm:ss时间样式
		return yesterdayTime;
	}

	/**
	 * 获取当前时间
	 *
	 * @return
	 */
	public static String takePresentTime(String geShi) {
		SimpleDateFormat format = new SimpleDateFormat(geShi); // 定义时间格式
		Date date = new Date();
		String time = format.format(date);// 将时间调整为yyyy-MM-dd
		return time;
	}

	/**
	 * 字符串转时间格式
	 * @param time
	 * @return
	 * @throws ParseException
	 */
	public static Date StringToDate(String time) throws ParseException{
		Date date = new SimpleDateFormat("yyyy-MM-dd").parse(time);
		return date;
	}
	/**
	 * 取任意天数
	 * @param date 时间
	 * @param type 0 今天  1 昨天  ..
	 * @return
	 */
	public static String timeDateToTian(Date date , int type) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.DATE, -type);
		date = calendar.getTime();
		return sdf.format(date);
	}



}
